/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package graphviewer;

import java.awt.*;
import javax.swing.*;
import java.util.*;

/**
 *
 * @author Sabitov Artem
 * @since 08.07.2013
 */
public class GraphViewer extends JFrame {
	public static final int FRAME_WIDTH = 1024;
	public static final int FRAME_HEIGHT = 768;
	public static final int FRAME_LOCATION_X = 32;
	public static final int FRAME_LOCATION_Y = 0;
	
	private String sTitle = "Graph Viewer";
	private String sVersion = "0.0.0";
	private String sDate = "05.09.2013";
	
	public static GraphViewer objGraphViewer;
	public static Debug objDebug;
	ArrayList<Node> nodes;
	
	private GraphViewer() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(FRAME_WIDTH, FRAME_HEIGHT);
		setLocation(FRAME_LOCATION_X, FRAME_LOCATION_Y);
		setTitle(buildTitle());
		getContentPane().setBackground(Color.GRAY);
		setVisible(true);
		runServiceFunctions();
	}
	
	private String buildTitle() {
		return sTitle + " " + sVersion + " (" + sDate + ")";
	}
	
	private void _initNodes() {
		nodes = new ArrayList<>();
		Node n1 = new Node(200, 100);
		Node n2 = new Node(500, 100);
		Node n3 = new Node(350, 350);
		Node n4 = new Node(586, 350);
		Node n5 = new Node(126, 110);
		Node n6 = new Node(450, 650);
		Node n7 = new Node(287, 410);
		Node n8 = new Node(314, 310);
		Node n9 = new Node(632, 510);
//		Node n10 = new Node(332, 110);
		nodes.add(n1);
		nodes.add(n2);
		nodes.add(n3);
		nodes.add(n4);
		nodes.add(n5);
		nodes.add(n6);
		nodes.add(n7);
		nodes.add(n8);
		nodes.add(n9);
//		nodes.add(n10);
		add(n1);
		add(n2);
		add(n3);
		add(n4);
		add(n5);
		add(n6);
		add(n7);
		add(n8);
		add(n9);
//		add(n10);
	}
	
	private void runServiceFunctions() {
		// добавляет на фрейм компонент с координатами мыши в дфнном фрейма
		add(new DebugMouse(this));
		// получаем ноды для рассчета
		_initNodes();
		// новый поток для расчета координат нодов
		Thread threadCalculate = new Thread(new Runnable() {
			@Override
			public void run() {
				objDebug.updateDebug();
				CalcDistance.calculateDistance(nodes);
			}
		});
		threadCalculate.start();
	}
	
	public GraphViewer getObjGraphViewer() {
		return this;
	}
	
	public static void main(String[] args) {
		GraphicsEnvironment graphicsEvn = 
      GraphicsEnvironment.getLocalGraphicsEnvironment();
 
      // массив, содержащий все доступные шрифты
//      String availFonts[] = 
//            graphicsEvn.getAvailableFontFamilyNames();
		
		
		objDebug = new Debug();
		objGraphViewer = new GraphViewer();
	}
}
